package com.ict.ms.area.service.api.impl;

import org.springframework.stereotype.Service;

import com.ict.ms.area.facade.api.IAreaAddService;
import com.ict.ms.area.facade.common.Change;
import com.ict.ms.area.facade.dto.PolygonDto;
import com.ict.ms.area.facade.model.Point;
import com.ict.ms.area.service.dao.IAreaAddDao;

import javax.annotation.Resource;

@Service("areaAddService")
public class AreaAddService  implements IAreaAddService  {
    @Resource
    IAreaAddDao dao;


    /**
     * 添加矩形区域
     * @param ldpoint 左下角点（double）
     * @param rupoint 右上角点 (double)
     * @param name 区域名
     * @param user 用户名
     * @param status 0：异常监控敏感区域；1：分发区域；2：其他区域（待定义）
     * @return 添加区域的id
     */
    public int addRectangle(Point ldpoint,Point rupoint,String name,String user,int status){
        PolygonDto polygonDto=new PolygonDto(name,user,status,ldpoint.getLat(),ldpoint.getLon(),rupoint.getLat(),rupoint.getLon());
        try {
            if(status!=300){
                dao.addRectangle(polygonDto);
            }else {
                //status数据库4位 存300报错
                polygonDto.setStatus(-1);
            }
            dao.addRectangleCustom(polygonDto);
            return dao.getid();
        }catch (Exception e){
            System.out.println("矩形插入失败"+e);
            return -1;
        }
    }

    /**
     * 添加多边形
     * @param points 多边形的端点（double）
     * @param name 区域名
     * @param user 用户名
     * @param status 0：异常监控敏感区域；1：分发区域；2：其他区域（待定义）
     * @return 添加区域的id
     */
    public int addPolygon(Point [] points,String name,String user,int status){

        /*
        组成多点闭环边界
         */
        String polygon="POLYGON((";
        for (Point point:points){
            polygon+=Change.point(point)+",";
        }
        /*
        polygon所有点已经加入，最后需要加入初始点，变为闭合空间
         */
        polygon+=Change.point(points[0])+")";
        polygon+=")";

        PolygonDto p1=new PolygonDto();
        p1.setArea(polygon);
        p1.setName(name);
        p1.setUser(user);
        p1.setStatus(status);

        try {
            if(status!=300){
                dao.addPolygon(p1);
            }else {
                p1.setStatus(-1);
            }
            dao.addPolygonCustom(p1);
            return dao.getid();
        }catch (Exception e){
            System.out.println("多边形插入失败"+e);
            return -2;
        }
    }

    /**
     * 添加圆形
     * @param centre 圆心（double）
     * @param radius 半径（米）
     * @param name 区域名
     * @param user 用户名
     * @param status 0：异常监控敏感区域；1：分发区域；2：其他区域（待定义）
     * @return 添加区域的id
     */
    public int addCircle(Point centre,int radius,String name,String user,int status){
        PolygonDto polygonDto = new PolygonDto();
        polygonDto.setName(name);
        polygonDto.setUser(user);
        polygonDto.setStatus(status);
        polygonDto.setCentreLon(centre.getLon());
        polygonDto.setCentreLat(centre.getLat());
        polygonDto.setRadius(radius);
        try{
            if(status!=300){
                dao.addCircle(polygonDto);
            }else {
                polygonDto.setStatus(-1);
            }
            dao.addCircleCustom(polygonDto);
            return dao.getid();
        }catch (Exception e){
            System.out.println("圆形插入失败"+e);
            return -3;
        }
    }

    /**
     * 添加扇形
     * @param centre 扇形的圆心
     * @param radius 半径（米）
     * @param radsmal 短半径（米）
     * @param start_deg 起始角度
     * @param end_deg 终止角度
     * @param name 区域名
     * @param user 用户名
     * @param status 0：异常监控敏感区域；1：分发区域；2：其他区域（待定义）
     * @return 添加区域的id
     */
    public int addSector(Point centre,int radius,int radsmal,double start_deg,double end_deg,String name,String user,int status){
        PolygonDto polygonDto =new PolygonDto();
        polygonDto.setName(name);
        polygonDto.setUser(user);
        polygonDto.setStatus(status);
        polygonDto.setCentreLon(centre.getLon());
        polygonDto.setCentreLat(centre.getLat());
        polygonDto.setRadsmal(radsmal);
        polygonDto.setStart_deg(start_deg);
        polygonDto.setEnd_deg(end_deg);
        polygonDto.setRadius(radius);
        try{
            if(status!=300){
                dao.addSector(polygonDto);
            }else {
                polygonDto.setStatus(-1);
            }
            dao.addSectorCustom(polygonDto);
            return dao.getid();
        }catch (Exception e){
            System.out.println("扇形插入失败"+e);
            return -3;
        }
    }
}
